package com.flex.core.validate;

import java.io.UnsupportedEncodingException;

import com.flex.core.validate.annotation.Validation;

/**
 * 
 * 抽象验证器类，需要子类继承，实现doValidate方法来完成验证的功能
 * 
 * @author radio
 * 
 */
public abstract class AbstractValidator {

	/**
	 * 验证器注解
	 */
	private Validation validation = null;

	/**
	 * 被验证的属性的值
	 */
	private Object filedValue = null;

	public Validation getValidation() {
		return validation;
	}

	public Object getFiledValue() {
		return filedValue;
	}

	public void setValidation(Validation validation) {
		this.validation = validation;
	}

	public void setFiledValue(Object filedValue) {
		this.filedValue = filedValue;
	}

	/**
	 * 验证方法，如果被验证的值为空则不进行验证
	 */
	protected String validate() {
		String msg = "";
		if (blankFiledValue()) {
			return msg;
		} else {
			return doValidate();
		}
	}

	/**
	 * 检查被验证的值是否为空，如果是字符串的时候，检查字符串是否为“”。为空则返回true
	 */
	protected boolean blankFiledValue() {
		if (filedValue == null) {
			return true;
		} else {
			if (filedValue instanceof String) {
				if (formateValue().equalsIgnoreCase("")) {
					return true;
				} else {
					return false;
				}
			} else {
				return false;
			}
		}
	}

	/**
	 * 对被验证的字符串，进行编码，以方便对汉字的统计，转换后汉字的长度为2
	 */
	protected String formateValue() {
		String value = (String) filedValue;
		try {
			return new String(value.getBytes(), "iso-8859-1");
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
			return null;
		}
	}

	/**
	 * 需要被子类实现的验证方法
	 * 
	 * @return 验证成功返回“”，否则返回错误信息
	 */
	protected abstract String doValidate();

}
